package top.hymsk.ecommerce.dao.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import top.hymsk.ecommerce.anno.RedisCache;
import top.hymsk.ecommerce.pojo.DO.CommentDO;
import top.hymsk.ecommerce.pojo.DTO.CartDTO;
import top.hymsk.ecommerce.pojo.DTO.SellerProductDTO;
import top.hymsk.ecommerce.pojo.PO.es.ElasticSearchProductPO;
import top.hymsk.ecommerce.pojo.PO.mysql.ProductPO;

import java.util.List;

/**
 * @author 花于陌上开
 */
@Mapper
public interface ProductMapper {
    SellerProductDTO getProductByProductId(@Param("productId") Integer productId);  //暂时未用

    List<SellerProductDTO> getProductsByStoreId(@Param("storeId") Integer storeId, @Param("begin") Integer begin);

    Integer getProductNumberByStoreId(@Param("storeId") Integer storeId);

    List<CommentDO> getCommentList(@Param("productId") Integer productId, @Param("begin") Integer begin);

    @RedisCache
    Integer getCommentNumber(@Param("productId") Integer productId);

    List<CartDTO> getCartList(@Param("userId") Integer userId, @Param("begin") Integer begin);

    Boolean addNewProductToCart(@Param("userId") Integer userId, @Param("productId") Integer productId, @Param("num") Integer num);

    Boolean updateProductOnCart(@Param("userId") Integer userId, @Param("productId") Integer productId, @Param("num") Integer num);

    Boolean removeProductFromCart(@Param("userId") Integer userId, @Param("productId") Integer productId);

    Integer getProductNumberFromCart(@Param("userId") Integer userId, @Param("productId") Integer productId);

    ElasticSearchProductPO getElasticSearchProduct(@Param("productId") Integer productId);

    /*上传商品信息*/
    Boolean insertProductInfo(@Param("product") ProductPO product);

    /*修改商品信息*/
    Boolean updateProductStatus(@Param("storeId") Integer storeId,@Param("productId") Integer productId, @Param("status") Integer status);

    /*修改商品信息*/
    Boolean updateProductInfo(@Param("storeId") Integer storeId, @Param("productId") Integer productId, @Param("title") String title, @Param("price") Double price, @Param("filePath") String filePath, @Param("status") Integer status);
}
